<html>
<head>
<title>CpcPaChi - Version 0.15</title>
<style type="text/css">
span {
	font-family: 'Courier New';
	font-size: 10pt;
	color: #000000;
}
.sc0 {
	color: #808080;
}
.sc3 {
	color: #008080;
}
.sc4 {
	color: #FF8000;
}
.sc5 {
	font-weight: bold;
	color: #0000FF;
}
.sc7 {
	color: #808080;
}
.sc9 {
	color: #804000;
}
.sc10 {
	font-weight: bold;
	color: #000080;
}
.sc11 {
}
</style>
</head>
<body>
<h2>Un compilador sencillo paso a paso (15 - Peque&ntilde;as mejoras)</h2>

<p align="right">(Volver al <a href="doc.html">&iacute;ndice</a>) </p>

<p>Nuestro analizador l&eacute;xico tiene todav&iacute;a varias carencias. Posiblemente
una de las m&aacute;s importantes es que los identificadores pueden
estar formados por varias letras, pero los operadores no, 
por lo que todav&iacute;a no podemos reconocer comparaciones como 
&quot;&lt;=&quot;.</p>

<p>Para solucionarlo, tenemos dos alternativas. La r&aacute;pida pero mala
es permitir que los &quot;s&iacute;mbolos&quot; est&eacute;n formados por 
m&aacute;s de un car&aacute;cter. La correcta es empezar a hablar 
(por fin) de &quot;tokens&quot;. As&iacute;,  tanto &quot;if&quot; como
&quot;+&quot; o &quot;&lt;=&quot; o la variable &quot;x&quot; 
ser&iacute;an tokens, cada uno de ellos con un &quot;valor&quot; o
&quot;lexema&quot; y tambi&eacute;n con un &quot;tipo&quot; (junto con
otros datos que nos pueden ser &uacute;tiles, como la fila y columna
en que se encuentra). Esta estructura estaba preparada desde la
versi&oacute;n 0.07, pero no la hab&iacute;amos utilizado hasta ahora.</p>

<p>Adem&aacute;s aprovecharemos para corregir las asignaciones: los 
s&iacute;mbolos &quot;:=&quot; pod&iacute;an estar separados hasta ahora &quot;: =&quot; 
se habr&iacute;a interpretado como una asignaci&oacute;n v&aacute;lida.
Nos vendr&aacute; bien usar, adem&aacute;s de la funci&oacute;n &quot;leerCaracter&quot;
otra &quot;devolverCaracter&quot; que ser&aacute; necesaria cuando leamos de m&aacute;s
al comprobar si al &quot;:&quot; le sigue un &quot;=&quot;.</p>

<p>Adem&aacute;s, orientado a la m&aacute;quina de destino a&ntilde;adiremos 
una orden cpcInk, que permita jugar con la paleta de colores,
redefinir color haciendo cpcInk(1,WHITE); o bien cpcInk(1,BLUE, RED);
(este &uacute;ltimo formato parpadear&iacute;a entre dos colores).
Estas constantes para los colores estar&aacute;n definidas tambi&eacute;n
en el compilador, para que el c&oacute;digo sea m&aacute;s legible.
Tambi&eacute;n a&ntilde;adiremos una orden WriteString, que escriba una cadena
(prefijada) en vez de s&oacute;lo una letra.</p>

<p>Ahora podremos hacer cosas como:</p>

<pre><code>program ej15; { Ejemplo 15 de CpcPaChi }

var
  i, j, k: byte; 

procedure inicializa;
begin
  cpcMode (1);
  cpcInk(0,BLACK);
  cpcInk(1,WHITE);
  cpcInk(2,BRIGHTYELLOW);
  cpcInk(3,PALEYELLOW);
  paper(0);
end;

procedure lineaHorizontal;
begin
  for i := 1 to 10 do
    writeChar('*') ;     
end;
 
(* Vamos a dibujar un cuadrado *)
begin

  inicializa;
  locate(2,2);
  writeString('Alla vamos...');
 
  locate(10,3);
  pen(1);
  lineaHorizontal;
 
  pen(2);
  for j := 4 to 7 do
    begin
    locate(10,j);
    writeChar('*');
    for k := 1 to 8 do
      writeChar(' ');
    writeChar('*');
    end;
   
  locate(10,8);
  pen(3); 
  lineaHorizontal;
 
  locate(20,20);
  writeString('Hemos terminado!');
  pen(1);
end.</code></pre>
  
<p><br />
  Como siempre, para m&aacute;s detalles, todo el c&oacute;digo est&aacute; en la p&aacute;gina del proyecto en Google Code:<br />
  <br />
  <a href="http://code.google.com/p/cpcpachi/">http://code.google.com/p/cpcpachi/</a></p>
<p align="right">(Volver al <a href="doc.html">&iacute;ndice</a>) </p>
</body>
</html>
